home *** CD-ROM | disk | FTP | other *** search
-
-
-
- bbbbccccooooppppyyyy((((DDDD3333)))) bbbbccccooooppppyyyy((((DDDD3333))))
-
-
-
- NNNNAAAAMMMMEEEE
- _bbbb_cccc_oooo_pppp_yyyy - copy data between address locations in the kernel
-
- SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- _####_iiii_nnnn_cccc_llll_uuuu_dddd_eeee _<<<<_ssss_yyyy_ssss_////_tttt_yyyy_pppp_eeee_ssss_...._hhhh_>>>>
- _####_iiii_nnnn_cccc_llll_uuuu_dddd_eeee _<<<<_ssss_yyyy_ssss_////_dddd_dddd_iiii_...._hhhh_>>>>
- _vvvv_oooo_iiii_dddd _bbbb_cccc_oooo_pppp_yyyy_((((_cccc_aaaa_dddd_dddd_rrrr______tttt _f_r_o_m_,,,, _cccc_aaaa_dddd_dddd_rrrr______tttt _t_o_,,,, _ssss_iiii_zzzz_eeee______tttt _b_c_o_u_n_t_))))_;;;;
-
- AAAArrrrgggguuuummmmeeeennnnttttssss
- _f_r_o_m Source address from which the copy is made.
-
- _t_o Destination address to which the copy is made.
-
- _b_c_o_u_n_t Number of bytes to be copied.
-
- DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- _bbbb_cccc_oooo_pppp_yyyy copies _b_c_o_u_n_t bytes from one kernel address to another. It chooses
- the best algorithm based on address alignment and number of bytes to
- copy.
-
- RRRReeeettttuuuurrrrnnnn VVVVaaaalllluuuueeeessss
- None
-
- UUUUSSSSAAAAGGGGEEEE
- If the input and output addresses overlap, the function executes, but the
- results are undefined.
-
- The source and destination address ranges must both be within the kernel
- address space and must be memory resident. No range checking is done.
- Since there is no mechanism by which drivers that conform to the rules of
- the DDI/DKI can obtain and use a kernel address which is not memory
- resident (an address which is paged out), DDI/DKI conforming drivers can
- assume that any address to which they have access is memory resident and
- therefore a valid argument to _bbbb_cccc_oooo_pppp_yyyy. Addresses within user address space
- are not valid arguments, and specifying such an address may cause the
- driver to corrupt the system in an unpredictable way. For copying
- between kernel and user space, drivers must use an appropriate function
- defined for that purpose (for example, _cccc_oooo_pppp_yyyy_iiii_nnnn(D3), _cccc_oooo_pppp_yyyy_oooo_uuuu_tttt(D3),
- _uuuu_iiii_oooo_mmmm_oooo_vvvv_eeee(D3), _uuuu_rrrr_eeee_aaaa_dddd_cccc(D3), or _uuuu_wwww_rrrr_iiii_tttt_eeee_cccc(D3)).
-
- Do not use _bbbb_cccc_oooo_pppp_yyyy to copy to or from I/O (hardware) addresses, because
- they may not allow accesses of the type used by _bbbb_cccc_oooo_pppp_yyyy; use it for memory
- addresses only. Use the _hhhh_wwww_cccc_pppp_iiii_nnnn(D3), or _hhhh_wwww_cccc_pppp_oooo_uuuu_tttt(D3) routines for I/O
- addresses.
-
- LLLLeeeevvvveeeellll
- Initialization, Base or Interrupt.
-
- SSSSyyyynnnncccchhhhrrrroooonnnniiiizzzzaaaattttiiiioooonnnn CCCCoooonnnnssssttttrrrraaaaiiiinnnnttttssss
- Does not sleep.
-
-
-
- PPPPaaaaggggeeee 1111
-
-
-
-
-
-
- bbbbccccooooppppyyyy((((DDDD3333)))) bbbbccccooooppppyyyy((((DDDD3333))))
-
-
-
- Driver-defined basic locks, read/write locks, and sleep locks may be held
- across calls to this function.
-
- EEEExxxxaaaammmmpppplllleeeessss
- An I/O request is made for data stored in a RAM disk. If the I/O
- operation is a read request, data are copied from the RAM disk to a
- buffer (line 9). If it is a write request, data are copied from a buffer
- to the RAM disk (line 15). The _bbbb_cccc_oooo_pppp_yyyy function is used since both the RAM
- disk and the buffer are part of the kernel address space.
-
- _1111 _####_dddd_eeee_ffff_iiii_nnnn_eeee _RRRR_AAAA_MMMM_DDDD_NNNN_BBBB_LLLL_KKKK _1111_0000_0000_0000 _////_**** _nnnn_uuuu_mmmm_bbbb_eeee_rrrr _oooo_ffff _bbbb_llll_oooo_cccc_kkkk_ssss _iiii_nnnn _RRRR_AAAA_MMMM _dddd_iiii_ssss_kkkk _****_////
- _2222 _####_dddd_eeee_ffff_iiii_nnnn_eeee _RRRR_AAAA_MMMM_DDDD_BBBB_SSSS_IIII_ZZZZ _NNNN_BBBB_PPPP_SSSS_CCCC_TTTT_RRRR _////_**** _bbbb_yyyy_tttt_eeee_ssss _pppp_eeee_rrrr _bbbb_llll_oooo_cccc_kkkk _****_////
- _3333 _cccc_hhhh_aaaa_rrrr _rrrr_aaaa_mmmm_dddd_bbbb_llll_kkkk_ssss_[[[[_RRRR_AAAA_MMMM_DDDD_NNNN_BBBB_LLLL_KKKK_]]]]_[[[[_RRRR_AAAA_MMMM_DDDD_BBBB_SSSS_IIII_ZZZZ_]]]]_;;;; _////_**** _bbbb_llll_oooo_cccc_kkkk_ssss _ffff_oooo_rrrr_mmmm_iiii_nnnn_gggg _RRRR_AAAA_MMMM _dddd_iiii_ssss_kkkk _****_////
- _...._...._....
- _4444
- _5555 _iiii_ffff _((((_bbbb_pppp_----_>>>>_bbbb______ffff_llll_aaaa_gggg_ssss _&&&& _BBBB______RRRR_EEEE_AAAA_DDDD_)))) _{{{{
- _6666 _////_****
- _7777 _**** _rrrr_eeee_aaaa_dddd _rrrr_eeee_qqqq_uuuu_eeee_ssss_tttt _---- _cccc_oooo_pppp_yyyy _dddd_aaaa_tttt_aaaa _ffff_rrrr_oooo_mmmm _RRRR_AAAA_MMMM _dddd_iiii_ssss_kkkk _tttt_oooo _ssss_yyyy_ssss_tttt_eeee_mmmm _bbbb_uuuu_ffff_ffff_eeee_rrrr
- _8888 _****_////
- _9999 _bbbb_cccc_oooo_pppp_yyyy_((((_rrrr_aaaa_mmmm_dddd_bbbb_llll_kkkk_ssss_[[[[_bbbb_pppp_----_>>>>_bbbb______bbbb_llll_kkkk_nnnn_oooo_]]]]_,,,, _bbbb_pppp_----_>>>>_bbbb______uuuu_nnnn_...._bbbb______aaaa_dddd_dddd_rrrr_,,,, _bbbb_pppp_----_>>>>_bbbb______bbbb_cccc_oooo_uuuu_nnnn_tttt_))))_;;;;
- _1111_0000
- _1111_1111 _}}}} _eeee_llll_ssss_eeee _{{{{
- _1111_2222 _////_****
- _1111_3333 _**** _wwww_rrrr_iiii_tttt_eeee _rrrr_eeee_qqqq_uuuu_eeee_ssss_tttt _---- _cccc_oooo_pppp_yyyy _dddd_aaaa_tttt_aaaa _ffff_rrrr_oooo_mmmm _ssss_yyyy_ssss_tttt_eeee_mmmm _bbbb_uuuu_ffff_ffff_eeee_rrrr _tttt_oooo _RRRR_AAAA_MMMM _dddd_iiii_ssss_kkkk
- _1111_4444 _****_////
- _1111_5555 _bbbb_cccc_oooo_pppp_yyyy_((((_bbbb_pppp_----_>>>>_bbbb______uuuu_nnnn_...._bbbb______aaaa_dddd_dddd_rrrr_,,,, _rrrr_aaaa_mmmm_dddd_bbbb_llll_kkkk_ssss_[[[[_bbbb_pppp_----_>>>>_bbbb______bbbb_llll_kkkk_nnnn_oooo_]]]]_,,,, _bbbb_pppp_----_>>>>_bbbb______bbbb_cccc_oooo_uuuu_nnnn_tttt_))))_;;;;
- _1111_6666 _}}}}
-
- RRRREEEEFFFFEEEERRRREEEENNNNCCCCEEEESSSS
- _cccc_oooo_pppp_yyyy_iiii_nnnn(D3), _cccc_oooo_pppp_yyyy_oooo_uuuu_tttt(D3), _hhhh_wwww_cccc_pppp_iiii_nnnn(D3), _hhhh_wwww_cccc_pppp_oooo_uuuu_tttt(D3) _uuuu_iiii_oooo_mmmm_oooo_vvvv_eeee(D3), _uuuu_rrrr_eeee_aaaa_dddd_cccc(D3),
- _uuuu_wwww_rrrr_iiii_tttt_eeee_cccc(D3)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PPPPaaaaggggeeee 2222
-
-
-
-